﻿using System;

namespace DecoratorPattern;

// 定义角色接口
public interface ICharacter
{
    void Move();
    void Display();
}

// 具体的角色类
public class GameCharacter : ICharacter
{
    public void Move() { Console.WriteLine("角色正在移动。"); }

    public void Display() { Console.WriteLine("显示角色状态。"); }
}

// 装饰器抽象类
public abstract class CharacterDecorator(ICharacter character) : ICharacter
{
    public virtual void Move() { character.Move(); }

    public virtual void Display() { character.Display(); }
}

// 速度提升装饰器
public class SpeedBoostDecorator(ICharacter character) : CharacterDecorator(character)
{
    public override void Move()
    {
        base.Move();
        // 添加速度提升的逻辑
        Console.WriteLine("速度提升！角色移动得更快。");
    }
}

// 无敌状态装饰器
public class InvincibleDecorator(ICharacter character) : CharacterDecorator(character)
{
    public override void Display()
    {
        base.Display();
        // 添加无敌状态的显示
        Console.WriteLine("角色处于无敌状态！");
    }
}

// 使用装饰器
public static class Program
{
    public static void Main()
    {
        // 创建基础角色
        ICharacter character = new GameCharacter();

        Console.WriteLine("给角色添加速度提升能力");
        character = new SpeedBoostDecorator(character);

        Console.WriteLine("给角色添加无敌状态\n");
        character = new InvincibleDecorator(character);

        // 角色移动
        character.Move();
        Console.WriteLine();

        // 显示角色状态
        character.Display();
    }
}